package com.example.javatest.zerenlian;/**
 * @author wangXiao
 */

/**
 有一个指向责任下一个对象的属性
 一个设置下一个对象的set方法
 给子类对象差异化实现的方法（如以下代码的doFilter方法）
 **/
public abstract class AbstractHandler {
    //责任链中的下一个对象
    private AbstractHandler nextHandler;

    /**
     * 责任链的下一个对象
     */
    public void setNextHandler(AbstractHandler nextHandler){
        this.nextHandler = nextHandler;
    }

    /**
     * 具体参数拦截逻辑,给子类去实现
     */
    public void filter() {
        doFilter();
        if (getNextHandler() != null) {
            getNextHandler().filter();
        }
    }

    public AbstractHandler getNextHandler() {
        return nextHandler;
    }

    abstract void doFilter();
}
